### 11.9 GIMPLE sequences

GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST`'s used in `GENERIC`. They are used to chain statements together, and when used in conjunction with sequence iterators, provide a framework for iterating through statements.

GIMPLE sequences are of type struct `gimple_sequence`, but are more commonly passed by reference to functions dealing with sequences. The type for a sequence pointer is `gimple_seq` which is the same as struct `gimple_sequence` *. When declaring a local sequence, you can define a local variable of type struct `gimple_sequence`. When declaring a sequence allocated on the garbage collected heap, use the function `gimple_seq_alloc` documented below.

There are convenience functions for iterating through sequences in the section entitled Sequence Iterators.

Below is a list of functions to manipulate and query sequences.

— GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple g)

> Link a gimple statement to the end of the sequence *`SEQ` if `G` is not `NULL`. If *`SEQ` is `NULL`, allocate a sequence before linking.

— GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, gimple_seq src)

> Append sequence `SRC` to the end of sequence *`DEST` if `SRC` is not `NULL`. If *`DEST` is `NULL`, allocate a new sequence before appending.

— GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)

> Perform a deep copy of sequence `SRC` and return the result.

— GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)

> Reverse the order of the statements in the sequence `SEQ`. Return `SEQ`.

— GIMPLE function: gimple gimple_seq_first (gimple_seq s)

> Return the first statement in sequence `S`.

— GIMPLE function: gimple gimple_seq_last (gimple_seq s)

> Return the last statement in sequence `S`.

— GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple last)

> Set the last statement in sequence `S` to the statement in `LAST`.

— GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple first)

> Set the first statement in sequence `S` to the statement in `FIRST`.

— GIMPLE function: void gimple_seq_init (gimple_seq s)

> Initialize sequence `S` to an empty sequence.

— GIMPLE function: gimple_seq gimple_seq_alloc (void)

> Allocate a new sequence in the garbage collected store and return it.

— GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq src)

> Copy the sequence `SRC` into the sequence `DEST`.

— GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)

> Return true if the sequence `S` is empty.

— GIMPLE function: gimple_seq bb_seq (basic_block bb)

> Returns the sequence of statements in `BB`.

— GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)

> Sets the sequence of statements in `BB` to `SEQ`.

— GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)

> Determine whether `SEQ` contains exactly one statement.